home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 2000 November: Tool Chest / Dev.CD Nov 00 TC Disk 2.toast / pc / sample code / quicktime / quicktime for java / transitions / src / transitioneffect.java
Encoding:
Java Source  |  2000-09-28  |  5.6 KB  |  213 lines

  1. /*
  2.  * QuickTime for Java SDK Sample Code
  3.  
  4.    Usage subject to restrictions in SDK License Agreement
  5.  * Copyright: © 1996-1999 Apple Computer, Inc.
  6.  
  7.  */
  8.  
  9. import java.awt.*;
  10. import java.awt.event.*;
  11. import java.io.*;
  12.  
  13. import quicktime.std.StdQTConstants;
  14. import quicktime.*;
  15. import quicktime.qd.*;
  16. import quicktime.io.*;
  17. import quicktime.std.image.*;
  18. import quicktime.std.movies.*;
  19. import quicktime.util.*;
  20.  
  21. import quicktime.app.QTFactory;
  22. import quicktime.app.time.*;
  23. import quicktime.app.image.*;
  24. import quicktime.app.display.*;
  25. import quicktime.app.anim.*;
  26. import quicktime.app.players.*;
  27. import quicktime.app.spaces.*;
  28. import quicktime.app.actions.*;
  29.  
  30.  
  31. public class TransitionEffect extends Frame implements StdQTConstants, QDConstants {
  32.     
  33.     public static void main(String args[]) {
  34.         try { 
  35.             QTSession.open();
  36.             
  37.             TransitionEffect te = new TransitionEffect("Transition Effect");
  38.             te.show();
  39.             te.toFront();    
  40.         } catch (Exception e) {
  41.             e.printStackTrace();
  42.             QTSession.close();
  43.         }
  44.     
  45.     }
  46.     
  47.     
  48.  
  49.     TransitionEffect(String title) throws Exception {
  50.         super (title);
  51.  
  52.         myQTCanvas = new QTCanvas(QTCanvas.kInitialSize, 0.5f, 0.5f);
  53.         add("Center", myQTCanvas);
  54.         
  55.         Dimension d = new Dimension (300, 300);
  56.         
  57.         addNotify();
  58.         Insets insets = getInsets();
  59.         setSize ((insets.left + insets.right + d.width + 5), (insets.top + insets.bottom + d.height + 10));
  60.         
  61.         addWindowListener(new WindowAdapter() {
  62.             public void windowClosing (WindowEvent e) {
  63.                 QTSession.close();
  64.                 dispose();
  65.             }
  66.             
  67.             public void windowClosed (WindowEvent e) { 
  68.                 System.exit(0);
  69.             }
  70.         });
  71.  
  72.         QDGraphics gw = new QDGraphics (new QDRect(d));
  73.         comp = new Compositor (gw, QDColor.black, 20, 1);
  74.  
  75.         ImagePresenter idb = makeImagePresenter (new QTFile (QTFactory.findAbsolutePath ("pics/stars.jpg")),
  76.                                     new QDRect(300, 220));
  77.         idb.setLocation (0, 0);
  78.         comp.addMember (idb, 2);
  79.  
  80.         ImagePresenter id = makeImagePresenter (new QTFile (QTFactory.findAbsolutePath ("pics/water.pct")),
  81.                                     new QDRect(300, 80));
  82.         id.setLocation (0, 220);
  83.         comp.addMember (id, 4);
  84.         
  85.         CompositableEffect ce = new CompositableEffect ();
  86.         AtomContainer effectSample = new AtomContainer(); 
  87.         effectSample.insertChild (new Atom(kParentAtomIsContainer), kEffectWhatAtom, 1, 0, EndianOrder.flipNativeToBigEndian32(kWaterRippleCodecType));
  88.         ce.setEffect (effectSample);
  89.         ce.setDisplayBounds (new QDRect(0, 220, 300, 80));
  90.         comp.addMember (ce, 3);
  91.         
  92.         Fader fader = new Fader();        
  93.         QTEffectPresenter efp = fader.getPresenter();
  94.         efp.setGraphicsMode (new GraphicsMode (blend, QDColor.gray));
  95.         efp.setLocation(80, 80);
  96.         comp.addMember (efp, 1);
  97.  
  98.         comp.addController((Controller)new TransitionControl (20, 1, ef) );
  99.  
  100.         myQTCanvas.setClient (comp, true);
  101.         comp.getTimer().setRate(1);
  102.     }
  103.     
  104.     
  105.     class Fader {
  106.         
  107.         int curr_frm = 0;
  108.  
  109.         
  110.         Fader() throws Exception {
  111.             File file = QTFactory.findAbsolutePath ("pics/Ship.pct");
  112.             QTFile f = new QTFile (file.getAbsolutePath());
  113.     
  114.             QDGraphics g = new QDGraphics (new QDRect (78, 29));
  115.             g.setBackColor (QDColor.black);
  116.             g.eraseRect(null);
  117.             ImagePresenter srcImage = ImagePresenter.fromGWorld(g);
  118.             Compositable destImage = new GraphicsImporterDrawer (f);
  119.             
  120.             ef = new QTTransition ();
  121.             ef.setRedrawing(true);
  122.             ef.setSourceImage (srcImage);
  123.             ef.setDestinationImage (destImage);
  124.             ef.setDisplayBounds (new QDRect(78, 29));
  125.             ef.setEffect (createFadeEffect (kEffectBlendMode, kCrossFadeTransitionType));
  126.             ef.setFrames(60);
  127.             ef.setCurrentFrame(0);
  128.         }
  129.         
  130.         
  131.         public QTEffectPresenter getPresenter() throws QTException {
  132.             QTEffectPresenter efPresenter = new QTEffectPresenter (ef);
  133.             return efPresenter;
  134.         }    
  135.     }
  136.  
  137.  
  138.  
  139.     public AtomContainer createFadeEffect (int effectType, int effectNumber) throws QTException {
  140.         AtomContainer effectSample = new AtomContainer();
  141.         effectSample.insertChild (new Atom(kParentAtomIsContainer), kEffectWhatAtom, 1, 0, EndianOrder.flipNativeToBigEndian32(kCrossFadeTransitionType));
  142.         effectSample.insertChild (new Atom(kParentAtomIsContainer), effectType, 1, 0, EndianOrder.flipNativeToBigEndian32(effectNumber));
  143.         return effectSample;
  144.     }
  145.     
  146.     
  147.     
  148.     private Compositor comp;
  149.     private QTCanvas myQTCanvas;
  150.     private QTTransition ef;
  151.  
  152.     
  153.     private ImagePresenter makeImagePresenter (QTFile file, QDRect size) throws Exception {
  154.         GraphicsImporterDrawer if1 = new GraphicsImporterDrawer (file);
  155.         if1.setDisplayBounds (size);
  156.         return ImagePresenter.fromGraphicsImporterDrawer (if1);
  157.     }
  158. }
  159.  
  160.  
  161. class TransitionControl extends PeriodicAction implements TicklishController {
  162.  
  163.     TransitionControl (int scale, int period, QTTransition t) {
  164.         super (scale , period);
  165.         this.t = t;            
  166.     }
  167.     
  168.     
  169.     QTTransition t;
  170.     boolean waiting = false;
  171.     int startWaitTime = 0;
  172.     int waitForMsecs = 4000;
  173.     
  174.     public void addedToSpace (Space s) {}
  175.  
  176.     public void removedFromSpace () {}
  177.     
  178.     protected boolean constraintReached () {
  179.         return false;
  180.     }
  181.     
  182.     public void timeChanged (int tm) throws QTException {
  183.         if (waiting)
  184.             startWaitTime = tm;
  185.         super.timeChanged(tm);
  186.     }
  187.     
  188.     protected void doAction (float er, int tm) throws QTException {
  189.         if (waiting) {
  190.             if ((er > 0 && ((startWaitTime + waitForMsecs) <= tm))
  191.                 || (er < 0 && ((startWaitTime - waitForMsecs) >= tm))) {
  192.                 
  193.                 waiting = false;
  194.                 t.setRedrawing(true);
  195.             } else
  196.                 return;
  197.         }
  198.         int curr_frm = t.getCurrentFrame();
  199.         curr_frm++;
  200.         t.setCurrentFrame(curr_frm);
  201.         if (curr_frm > t.getFrames()) {
  202.             curr_frm = 0;
  203.             t.setRedrawing(false);
  204.             t.setCurrentFrame(curr_frm);    
  205.             t.swapImages();
  206.             waiting = true;
  207.             startWaitTime = tm;
  208.         }
  209.     }    
  210.     
  211. }    
  212.     
  213.